Telegram Group & Telegram Channel
🐍 Задача с подвохом: mutable default arguments в Python

🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict

📌 Условие

Что выведет следующий код?


def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


Вопросы

1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?

🔍 Разбор

Ожидаемый вывод:

[1]
[1, 2]
[1, 2, 3]


🔧 Почему так происходит

- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.

⚠️ Подвох

Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.

🧠 Вывод

- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:


def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list


Тогда вывод будет:

[1]
[2]
[3]


📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.

@python_job_interview



tg-me.com/python_job_interview/1111
Create:
Last Update:

🐍 Задача с подвохом: mutable default arguments в Python

🔹 Уровень: Advanced
🔹 Темы: изменяемые аргументы по умолчанию, функции, ловушки с list и dict

📌 Условие

Что выведет следующий код?


def append_to_list(value, my_list=[]):
my_list.append(value)
return my_list

print(append_to_list(1))
print(append_to_list(2))
print(append_to_list(3))


Вопросы

1. Почему результат выглядит неожиданно?
2. Как исправить это поведение?
3. Когда стоит использовать изменяемые аргументы по умолчанию — если вообще стоит?

🔍 Разбор

Ожидаемый вывод:

[1]
[1, 2]
[1, 2, 3]


🔧 Почему так происходит

- Аргументы по умолчанию вычисляются один раз — во время определения функции, а не при каждом вызове.
- Значение my_list=[] создаётся один раз и затем используется повторно при всех вызовах.
- Все вызовы append_to_list изменяют один и тот же список.

⚠️ Подвох

Это один из самых коварных багов в Python, особенно среди начинающих — кажется, что my_list должен быть новым на каждый вызов, но это не так.

🧠 Вывод

- Никогда не используй изменяемые типы (list, dict, set) как значения по умолчанию.
- Вместо этого используй None и создавай новый объект вручную:


def append_to_list(value, my_list=None):
if my_list is None:
my_list = []
my_list.append(value)
return my_list


Тогда вывод будет:

[1]
[2]
[3]


📌 Это правило относится ко всем изменяемым типам: [], {}, set() и кастомные классы.

@python_job_interview

BY Python вопросы с собеседований


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/python_job_interview/1111

View MORE
Open in Telegram


Python вопросы с собеседований Telegram | DID YOU KNOW?

Date: |

The Singapore stock market has alternated between positive and negative finishes through the last five trading days since the end of the two-day winning streak in which it had added more than a dozen points or 0.4 percent. The Straits Times Index now sits just above the 3,060-point plateau and it's likely to see a narrow trading range on Monday.

If riding a bucking bronco is your idea of fun, you’re going to love what the stock market has in store. Consider this past week’s ride a preview.The week’s action didn’t look like much, if you didn’t know better. The Dow Jones Industrial Average rose 213.12 points or 0.6%, while the S&P 500 advanced 0.5%, and the Nasdaq Composite ended little changed.

Python вопросы с собеседований from sg


Telegram Python вопросы с собеседований
FROM USA